home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / basic / bc7free.zip / FREE-M2.BAS < prev    next >
BASIC Source File  |  1990-03-27  |  4KB  |  119 lines

  1.  
  2.   ' Free2.Bas  03-27-90   T.E.M.  Use Interrupt under BC 7.x & Mach2
  3.   ' ---------  Reports free disk space on 1 or more drives.
  4.   ' ---------  Remember to invoke QBX fn /lQBX   <-- Note !
  5.  
  6.   '$INCLUDE: 'QBX.BI'
  7.    DIM Regs AS RegType
  8.  
  9. Begin:
  10.    Clen% = LEN(COMMAND$)
  11.    IF Clen% > 0 THEN GOTO DoCmdTail
  12.  
  13. DoDefaultDriveOnly:
  14.    Regs.ax = &H1900             ' Current drv info: DOS service 19
  15.    Interrupt &H21, Regs, Regs
  16.    Q.Drive$ = CHR$((Regs.ax AND &HFF) + 65) + ":"
  17.    GOSUB Q.GetDiskInfo
  18.    GOSUB Q.ReportDiskInfo
  19.    SYSTEM
  20.  
  21. DoCmdTail:
  22.    FOR DriveLetters% = 1 TO Clen%
  23.      C$ = MID$(COMMAND$, DriveLetters%, 1)
  24.      DriveLetter% = INSTR("ABCDEFGHIJKLMNOPQRSTUVWXYZ", C$)
  25.      IF DriveLetter% > 0 THEN
  26.     Q.Drive$ = C$
  27.     GOSUB Q.GetDiskInfo
  28.     GOSUB Q.ReportDiskInfo
  29.      END IF
  30.    NEXT DriveLetters%
  31.    SYSTEM
  32.  
  33. Q.GetDiskInfo:
  34.    Regs.ax = &H3600   ' Get Q.Drive$ free disk space
  35.    Regs.dx = ASC(UCASE$(Q.Drive$)) - 64
  36.    Interrupt &H21, Regs, Regs
  37.    Q.BytesPersector% = Regs.cx
  38.    Q.SectorsPerCluster% = Regs.ax
  39.    IF Regs.dx >= 0 THEN
  40.     Q.ClustersTotal% = Regs.dx
  41.    ELSE Q.ClustersTotal% = (Regs.dx + 65536)
  42.    END IF
  43.  
  44.    IF Regs.dx >= 0 THEN
  45.     Q.ClustersAvail% = Regs.bx
  46.    ELSE Q.ClustersAvail% = (Regs.bx + 65536)
  47.    END IF
  48.  
  49.    Q.ClustersAvail& = ABS(Q.ClustersAvail%)  ' Convert to Long Integer
  50.    Q.ClustersTotal& = ABS(Q.ClustersTotal%)
  51.    Q.BytesPersector& = ABS(Q.BytesPersector%)
  52.    Q.SectorsPerCluster& = ABS(Q.SectorsPerCluster%)
  53.  
  54.    Temp& = (Q.BytesPersector& * Q.SectorsPerCluster&)
  55.    Q.FreeSpace& = (Temp& * Q.ClustersAvail&)
  56.    Q.TotalSpace& = (Temp& * Q.ClustersTotal&)
  57.  
  58.    Q.FreePct& = ((Q.ClustersAvail& * 100) \ Q.ClustersTotal&)
  59.  
  60.    RETURN
  61.   '------
  62.  
  63. Q.ReportDiskInfo:
  64.    Lin$ = "Drive " + Q.Drive$ + " has "
  65.    S$ = STR$(Q.FreeSpace&)
  66.     GOSUB W.Commatize
  67.     S$ = SPACE$(11) + S$       ' Right justify
  68.     S$ = RIGHT$(S$, 11)
  69.    Lin$ = Lin$ + S$ + " bytes free ("
  70.    S$ = STR$(Q.FreePct&)
  71.     GOSUB W.Commatize
  72.     S$ = "   " + S$
  73.     S$ = RIGHT$(S$, 3)
  74.    Lin$ = Lin$ + S$ + " %)" + CHR$(13) + CHR$(10)
  75.    CALL MhPrint(Lin$)
  76.  
  77.    RETURN
  78.   '------
  79.  
  80.  
  81. W.Commatize:
  82.      'Call with digital string in S$, returns S$ containing commas (longer!)
  83.      'If a decimal point is included, it is handled correctly.
  84.      S$ = LTRIM$(S$)
  85.  
  86.      Temp$ = ""
  87.      FOR Temp% = 1 TO LEN(S$)
  88.      C$ = MID$(S$, Temp%, 1)
  89.      IsNumeric% = INSTR(".-0123456789", C$)
  90.      IF (IsNumeric% <> 0) THEN Temp$ = Temp$ + C$
  91.      NEXT Temp%
  92.  
  93.      'Are there any decimal places?
  94.      Decimals$ = ""
  95.      Temp% = INSTR(Temp$, ".")
  96.      S$ = Temp$
  97.      SLen% = LEN(S$)
  98.      IF (Temp% <> 0) THEN
  99.         Decimals$ = RIGHT$(Temp$, ((SLen% - Temp%) + 1))
  100.         S$ = LEFT$(Temp$, (Temp%) - 1)
  101.      END IF
  102.  
  103.       SLen% = LEN(S$): S2$ = ""
  104.       IF SLen% < 4 THEN S2$ = S$: GOTO W.Commatize.Exit
  105.       IF SLen% = 4 THEN S2$ = LEFT$(S$, 1) + "," + RIGHT$(S$, 3)
  106.       IF SLen% = 5 THEN S2$ = LEFT$(S$, 2) + "," + RIGHT$(S$, 3)
  107.       IF SLen% = 6 THEN S2$ = LEFT$(S$, 3) + "," + RIGHT$(S$, 3)
  108.       IF SLen% = 7 THEN S2$ = LEFT$(S$, 1) + "," + MID$(S$, 2, 3) + "," + RIGHT$(S$, 3)
  109.       IF SLen% = 8 THEN S2$ = LEFT$(S$, 2) + "," + MID$(S$, 3, 3) + "," + RIGHT$(S$, 3)
  110.       IF SLen% = 9 THEN S2$ = LEFT$(S$, 3) + "," + MID$(S$, 4, 3) + "," + RIGHT$(S$, 3)
  111.      IF SLen% = 10 THEN S2$ = LEFT$(S$, 1) + "," + MID$(S$, 2, 3) + "," + MID$(S$, 5, 3) + "," + RIGHT$(S$, 3)
  112.      IF SLen% = 11 THEN S2$ = LEFT$(S$, 2) + "," + MID$(S$, 2, 3) + "," + MID$(S$, 5, 3) + "," + RIGHT$(S$, 3)
  113.      IF SLen% = 12 THEN S2$ = LEFT$(S$, 3) + "," + MID$(S$, 2, 3) + "," + MID$(S$, 5, 3) + "," + RIGHT$(S$, 3)
  114. W.Commatize.Exit:
  115.      IF S2$ <> "" THEN S$ = S2$
  116.      IF Decimals$ <> "" THEN S$ = S$ + Decimals$
  117.      RETURN
  118.  
  119.